package cc.shacocloud.kotlin.tools.uitls

import java.io.Serializable

/**
 * [MultiValueMap] 的简单实现，它包装了一个 [LinkedHashMap]，在 [ArrayList] 中存储多个值
 *
 * 此 Map 实现通常不是线程安全的，它仅用于单个线程。
 * @author 思追(shaco)
 */
class LinkedMultiValueMap<K, V>(
    targetMap: MutableMap<K, MutableList<V>>,
) : MultiValueMapAdapter<K, V>(targetMap), Serializable, Cloneable {

    constructor() : this(LinkedHashMap())

    constructor(expectedSize: Int) : this(LinkedHashMap(expectedSize))

    /**
     * 创建此地图的深层副本
     */
    fun deepCopy(): LinkedMultiValueMap<K, V> {
        val copy = LinkedMultiValueMap<K, V>(size)
        forEach { (key: K, values: List<V>) -> copy[key] = ArrayList(values) }
        return copy
    }

    /**
     * 创建此地图的常规副本
     *
     * @see put
     * @see putAll
     * @see deepCopy
     */
    public override fun clone(): LinkedMultiValueMap<K, V> {
        return LinkedMultiValueMap(this)
    }
}
